﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using NHibernate;
using BobDotNet.Classes.Base;
using NHibernate.Criterion;

namespace BobDotNet.Classes.Dao
{
    public class DaoUser
    {
        /// <summary>
        /// Permet de charger (ou non) un utilisateur selon sont login et mot de passe
        /// </summary>
        /// <param name="login">Le login</param>
        /// <param name="motDePasse">Le mot de passe (non Hashé)</param>
        /// <returns>L'utilisateur chargé (ou non :p )</returns>
        public static User Charge(String login, String motDePasse)
        {
            User retour = new User();
            ISession session = NHibernateSessionManager.Instance.GetSession();
            IList<User> temp = session
                .CreateCriteria(typeof(User))
                .Add(Expression.Eq("Login", login))
                .Add(Expression.Eq("MotDePasse", motDePasse))
                .List<User>();

            if (temp.Count.Equals(1))
            {
                retour = temp[0];
            }

            NHibernateSessionManager.Instance.CloseSession();
            return retour;
        }

        public static User Charge(string id)
        {
            return DaoUser.Charge(Int32.Parse(id));
        }

        /// <summary>
        /// Charge l'utilisateur selon son Id
        /// </summary>
        /// <param name="id">Identificateur de l'utilisateur</param>
        /// <returns>L'utilisateur chargé (ou non)</returns>
        public static User Charge(Int32 id)
        {
            return (User)DaoBase.Charge(id, User.NomClasse);
        }

        public static List<User> ChargeTout()
        {
            List<User> retour;
            ISession session = NHibernateSessionManager.Instance.GetSession();
            retour = (List<User>)session.CreateCriteria(typeof(User)).List<User>();
            NHibernateSessionManager.Instance.CloseSession();
            return retour;
        }

        public static void MettreAJour(User u)
        {
            try
            {
                DaoBase.MettreAJour(u);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static void Creer(User u)
        {
            try
            {
                DaoBase.Creer(u);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }

        public static void Supprimer(string Id)
        {
            DaoUser.Supprimer(Int32.Parse(Id));
        }

        public static void Supprimer(Int32 Id)
        {
            DaoUser.Supprimer(DaoUser.Charge(Id));
        }

        public static void Supprimer(User u)
        {
            try
            {
                DaoBase.Supprimer(u);
            }
            catch (Exception ex)
            {
                throw ex;
            }
        }
    }
}
